/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package redinftel.sesiones;

import java.math.BigDecimal;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import redinftel.entidades.Multimedia;
import redinftel.entidades.Usuario;

/**
 * Clase para el manejo de datos de la entidad Multimedia.
 * @author Six Degrees Team
 */
@Stateless
public class MultimediaFacade extends AbstractFacade<Multimedia> implements MultimediaFacadeRemote {
    @PersistenceContext(unitName = "redinftel-ejbPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public MultimediaFacade() {
        super(Multimedia.class);
    }

     @Override
    public BigDecimal findPK() {
        BigDecimal res;

        res=(BigDecimal) em.createQuery("SELECT MAX(m.idMultimedia) FROM Multimedia m")
                .getSingleResult();

        if (res==null)
        {
            res=new BigDecimal(1);
        }else{
            res= new BigDecimal(res.intValue()+1);
        }
        return res;
    }

    @Override
     public List<Usuario> findAmigosNoEtiquetados(int usuario,String amigo,int idMultimedia) {
        

        List<Usuario> amigos= em.createQuery("SELECT u.idUsuario FROM Usuario u"
               + " INNER JOIN u.amistadCollection a1 WHERE (a1.idAmigo1 = ?1 OR  a1.idAmigo2 = ?1) AND u.idUsuario<> ?1"
               + " AND u.estado=\"ACTIVO\" AND (CONCAT(CONCAT(UPPER(u.perfil.nombre),' '), UPPER(u.perfil.apellidos)) LIKE ?2) ORDER BY u.perfil.nombre,u.perfil.apellidos")
               .setParameter(1, usuario).setParameter(2,"%"+amigo+"%").getResultList();


                //ETIQUETADOS
        List<Usuario> etiquetados = em.createQuery("SELECT e.usuario.idUsuario FROM Multimedia m "
                + "INNER JOIN m.etiquetasCollection e WHERE m.idMultimedia = ?1")
                .setParameter(1, idMultimedia).getResultList();

        amigos.removeAll(etiquetados);
        return amigos;
    }
}
